/* function fn() {
  console.log(this)
}
const obj = {
  age: 18,
}

Function.prototype.myCall = function (_this) {
  // this => fn
  // _this => obj
  // obj._this = fn
  _this._this = this
  _this._this() // 这一步打印确实还有
  delete _this._this // 走到下面就被删掉了 _this 属性被删掉
}

fn.myCall(obj) */

/* const arr = ['a', 'b', 'c']
const obj = { age: 18 } */
/* arr.forEach(function (item, index, tempArr) {
  console.log(item, index, tempArr, this)
}, obj) */

/* Array.prototype.forEach2 = function (fn, _this) {
  for (let i = 0; i < this.length; i++) {
    fn.call(_this, this[i], i, this)
  }
} */

/* arr.forEach2(function (item, index, tempArr) {
  console.log(item, index, tempArr, this)
}, obj) */

/* arr.forEach2(function (item) {
  console.log(item)
}) */

/* const arr = [1, 3, 5]
Array.prototype.filter2 = function (fn) {
  const arr = []
  for (let i = 0; i < this.length; i++) {
    // 当函数调用完之后的结果是 true 的时候，彩保留 item
    fn(this[i]) && arr.push(this[i])
  }
  return arr
}
console.log(arr.filter2((item) => item > 3)) */
